﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Windows.Forms;
namespace F10101CM.Control
{
    public class PopulateToComboBox 
    {
        private const int FIRST_YEAR = 1990;
        private const int MAX_YEAR = 9999;

        public void populateDataToCombobox(DataTable dt, string lblValue, string lblCaption, ComboBox cbx)
        {
            if (dt == null)
            {
                return;
            }

            cbx.DataSource = dt;
            cbx.ValueMember = lblValue;
            cbx.DisplayMember = lblCaption;
        }

        /// <summary>
        /// Khởi tạo giá trị trong combobox
        /// Hiển thị cả mã lẫn giá trị
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="lblValue"></param>
        /// <param name="lblCaption"></param>
        /// <param name="cbx"></param>
        public void populateDataToComboBoxCombineValueAndCaption(DataTable dt, string lblValue, string lblCaption, ComboBox cbx)
        {
            if (dt == null || dt.Rows.Count == 0)
            {
                return;
            }

            foreach(DataRow dr in dt.Rows)
            {
                string s = dr[lblValue].ToString() + "." + dr[lblCaption].ToString();
                cbx.Items.Add(s);
            }
        }
        /// <summary>
        /// Tạo năm lệ thuộc vào tuổi
        /// </summary>
        /// <param name="cbx"></param>
        /// <param name="withinAge"></param>
        public void populateBirthYearToCombobox(ComboBox cbx, int[] withinAge)
        {
            int maxAge = withinAge[0];
            int minAge = withinAge[1];
            int nowCurrentYear = DateTime.Now.Year;
            int minBirthYear = 0;
            int maxBirthYear = 0;

            if (maxAge == 0)
            {
                minBirthYear = nowCurrentYear - minAge;

                for (int i = 0; i <= 100; i++)
                {
                    cbx.Items.Add(minBirthYear - i);
                }
            }
            else
            {
                minBirthYear = nowCurrentYear - minAge;
                maxBirthYear = nowCurrentYear - maxAge;

                for(int i = minBirthYear; i <= maxBirthYear; i++)
                {
                    cbx.Items.Add(i);
                }
            }
        }

        /// <summary>
        /// Tạo năm tự do
        /// </summary>
        /// <param name="num"></param>
        public void populateYearToComboBox(NumericUpDown num)
        {
            num.Maximum = MAX_YEAR;
            num.Minimum = FIRST_YEAR;
        }

        /// <summary>
        /// Tạo số ngày trong năm
        /// </summary>
        /// <param name="cbx"></param>
        /// <param name="yr"></param>
        /// <param name="mnth"></param>
        public void populateDayToComboBox(ComboBox cbx, int yr, int mnth)
        {
            //Xác định năm đó có phải là năm nhuần hay không
            bool isNhuan = false;

            if (yr % 4 == 0 || yr % 400 == 0 && yr % 100 != 0)
            {
                isNhuan = true;
            }

            if (mnth != 2)
            {
                switch (mnth)
                {
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        for (int i = 1; i <= 31; i++)
                        {
                            cbx.Items.Add(i);
                        }
                        break;
                    default:
                        for (int i = 1; i <= 30; i++)
                        {
                            cbx.Items.Add(i);
                        }
                        break;
 
                }
            } 
            else
            {
                int numberOfDay = 28;
                if (isNhuan)
                {
                    numberOfDay = 29;
                }

                for (int i = 1; i <= numberOfDay; i++)
                {
                    cbx.Items.Add(i);
                }
            }
        }

        /// <summary>
        /// Tạo số tháng trong năm
        /// </summary>
        /// <param name="cbx"></param>
        public void populateMonthOfComboBox(ComboBox cbx)
        {
            for(int i = 1; i <= 12; i++)
            {
                cbx.Items.Add(i);
            }
        }

    }
}
